package com.guilin.vo;

import com.guilin.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 问卷详情VO（包含题目列表）
 * 用于前端获取问卷详情及题目
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class SurveyQuestionnaireDetailVO extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /** 问卷ID */
    private Long id;

    /** 问卷名称 */
    private String questionnaireName;

    /** 问卷时长(分钟) */
    private Long duration;

    /** 结束语 */
    private String closingMessage;

    /** 问卷状态(0-草稿,1-发布,2-结束) */
    private Long status;

    /** 开始时间 */
    private Date startTime;

    /** 结束时间 */
    private Date endTime;

    /** 题目列表 */
    private List<QuestionDetailVO> questions;

    /** 题目类型常量 */
    public static class QuestionType {
        public static final int SINGLE_CHOICE = 1; // 单选题
        public static final int MULTIPLE_CHOICE = 2; // 多选题
        public static final int FILL_BLANK = 3; // 填空题
        public static final int SCALE = 4; // 量表题
        public static final int OPEN_ENDED = 5; // 开放题
    }

    /** 输入类型常量 */
    public static class InputType {
        public static final int TEXT = 1; // 文本
        public static final int NUMBER = 2; // 数字
        public static final int DATE = 3; // 日期
        public static final int TEXTAREA = 4; // 多行文本
    }

    /**
     * 题目详情VO
     */
    @Data
    public static class QuestionDetailVO {
        /** 题目ID */
        private Long id;

        /** 所属问卷ID */
        private Long questionnaireId;

        /** 试题名称 */
        private String questionText;

        private List<Map<String, String>> options;


        /** 试题类型 */
        private Long questionType;

        /** 排序值（越大越靠前） */
        private Long sortOrder;

        /** 是否必填 */
        private Boolean required;

        /** 输入类型（仅填空/开放题） */
        private Long inputType;

        /** 最大输入长度（仅填空/开放题） */
        private Long maxLength;

        /** 创建时间 */
        private Date createTime;

        /** 更新时间 */
        private Date updateTime;
    }
}